#include "protocol.h"
nb_data_struct_t1	nb_data_1;
nb_data_struct_t2	nb_data_2;
nb_data_struct_t3	nb_data_3;
nb_data_struct_t5	nb_data_5;
unsigned char PFC = 0;
char LH_data[100];
char RSEQ;
#define DEVICE_ID "0x00112001000001"
#define crc_calc
#define Link_interface_detection 
#define Control_command
/*
*帧头帧尾已经在初始化的时候填充好，在每一帧数据发送时不需要重新填充。
*然后填充其他数据
*最后填充长度（控制域 和 用户数据的长度）
*其中 帧流水号 和 CRC 校验域 是由发送函数来填充  帧序列号也是
*
*/

/*在启动时，需要初始化协议数据
*包括协议起始字符和结束字符
*/

int protocol_data_init(void){
	nb_data_1.start_char1 = 0x68;
	nb_data_1.start_char2 = 0x68;

	nb_data_5.end_char	  = 0x16;

	nb_data_2.terminal_id.reserved		  = 0x00;	//保留
	nb_data_2.terminal_id.manufacturer_id = 0x11;	//厂家代码
	nb_data_2.terminal_id.light_type 	  = 0x20;	//光源类型
	nb_data_2.terminal_id.batch_number	  = 0x01;	//批次号
	nb_data_2.terminal_id.device_id[0]	  = 0x00;	//设备流水号 BCD码格式
	nb_data_2.terminal_id.device_id[1]	  = 0x00;	//
	nb_data_2.terminal_id.device_id[2]	  = 0x10;	//
	nb_data_2.terminal_type	= 0x20;					//单灯控制器
	nb_data_2.frame_attr[1] = 0x01;					//000000001			不加密版本1
	nb_data_2.frame_serial_number = 0;				//帧流水号初始化

	nb_data_3.pn  = 0x00;			//pn = 0，因为是NB单灯，一个NB带一个单灯
	return 1;
}






#ifdef Link_interface_detection  //02 链路接口检测
int LH_Link_interface_detection_login(void){
	nb_data_1.length1 = 1;
	nb_data_1.length2 = nb_data_1.length1;

	nb_data_2.frame_attr[0] = 0xB0;	//1100 0000			上行，启动站

	nb_data_3.afn = 0x02;			//链路接口检测	
	nb_data_3.seq = 0x70;			//0111 时间帧有效位:0无  单帧:11 需要确认:1  剩余四位是帧序列号
	nb_data_3.fn = 0x01;			//fn = F1,F1登录


	LH_send_string_up(string_CCID, sizeof(string_CCID));

	/*此处应该等待超时时间，如果超时时间内接受到回复则 ok 否则重发 n次*/
	return 1;
}


int LH_Link_interface_detection_logout(void){
	nb_data_1.length1 = 1;
	nb_data_1.length2 = nb_data_1.length1;

	nb_data_2.frame_attr[0] = 0xB0;	//1100 0000			上行，启动站

	nb_data_3.afn = 0x02;			//链路接口检测	
	nb_data_3.seq = 0x70;			//0111 时间帧有效位:0无  单帧:11 需要确认:1  剩余四位是帧序列号
	nb_data_3.fn = 0x02;			//fn = F2,F2退出登录

	LH_send_string_up(string_CCID, sizeof(string_CCID));
	return 1;
}


int LH_Link_interface_detection_heartbeat(void){
	nb_data_1.length1 = 1;
	nb_data_1.length2 = nb_data_1.length1;

	nb_data_2.frame_attr[0] = 0xB0;	//1100 0000			上行，启动站

	nb_data_3.afn = 0x02;			//链路接口检测	
	nb_data_3.seq = 0x70;			//0111 时间帧有效位:0无  单帧:11 需要确认:1  剩余四位是帧序列号
	nb_data_3.fn = 0x03;			//fn = F3,F3 心跳节拍 heartbeat

	LH_send_string_up(&csq_value, sizeof(csq_value));
	return 1;
}
#endif















#ifdef Control_command         		//afn = 05 控制命令
int LH_Control_command_remote_control(void){


	/*此处应该等待超时时间，如果超时时间内接受到回复则 ok 否则重发 n次*/
	return 1;
}


#endif





























































